﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.View;
using SIIE_ERP.Codigo;
using SIIE_ERP.BaseDatos.Ventas.Transacciones;
using SIIE_ERP.BaseDatos;

namespace Elysium.Demo.Ventas.Transacciones
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class RemisionesAFactura : UserControl, IPropiedadesNavegacion
    {
        ////////////////////////////////////////////////////////////////////////////
        //  PROPIEDADES DE NAVEGACION
        public string Texto { get { return _texto; } }
        public TabControl TabControlPadre { get { return _tabControlPadre; } }
        public TabItem TabItemPadre { get { return _tabItemPadre; } }

        private string _texto;
        private TabControl _tabControlPadre;
        private TabItem _tabItemPadre;

        public void setParametros(string Texto, ref TabControl tabControl, ref TabItem tabItem)
        {
            this._texto = Texto; this._tabControlPadre = tabControl; this._tabItemPadre = tabItem;
        }

        private void ButtonRegresar_Click(object sender, RoutedEventArgs e)
        {
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }
        // FIN DE PROPIEDADES DE NAVEGACION
        ///////////////////////////////////////////////////////////////////////////

        private UsuarioActivo _sesion;
        private int _Id_Cliente_Seleccion;
        private int _Id_Moneda_Seleccion;

        public RemisionesAFactura(UsuarioActivo usuario)
        {
            InitializeComponent();
            this._sesion = usuario;
            CargaCatalogos();

            //if (Combo_ClientesAutoComplete.Items.Count > 0)
            //    Combo_ClientesAutoComplete.SelectedIndex = 0;
        }

        private void CargaCatalogos()
        {
            //Clientes
            ComboBoxUI.ComboClientes_AutoComplete_SoloClientes(ref Combo_ClientesAutoComplete, _sesion, "");            
            //Monedas
            ComboBoxUI.ComboMonedas(Combo_Monedas, _sesion);
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("RemisionesFacturas.htm", "Ayuda");
            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void Button_EscogerCliente_Click(object sender, RoutedEventArgs e)
        {
            if (Combo_ClientesAutoComplete.SelectedValue == null)
            {
                MessageBox.Show("Favor de Seleccionar un cliente");
                return;
            }

            Combo_ClientesAutoComplete.IsEnabled = false;
            Button_EscogerCliente.IsEnabled = false;

            Combo_Monedas.IsEnabled = true;
            Button_EscogerMoneda.IsEnabled = true;
            
            _Id_Cliente_Seleccion = Int32.Parse(Combo_ClientesAutoComplete.SelectedValue.ToString());            
        }

        private void Button_EscogerMoneda_Click_1(object sender, RoutedEventArgs e)
        {
            if (Combo_Monedas.SelectedValue == null)
            {
                MessageBox.Show("Favor de Seleccionar la moneda de las Remisiones");
                return;
            }

            Combo_Monedas.IsEnabled = false;
            Button_EscogerMoneda.IsEnabled = false;

            Combo_Remisiones.IsEnabled = true;
            Button_Agregar.IsEnabled = true;

            _Id_Moneda_Seleccion = Int32.Parse(Combo_Monedas.SelectedValue.ToString());            

            //Remisiones
            ComboBoxUI.ComboRemisiones(ref Combo_Remisiones, _Id_Cliente_Seleccion, _sesion, _Id_Moneda_Seleccion);
        }

        private void Button_Agregar_Click(object sender, RoutedEventArgs e)
        {
            try { 
            bool Aux = true;
            foreach (CDocto c in DatosDataGrid.Items)
            {
                if (c.Id.Equals(Combo_Remisiones.SelectedValue.ToString()) && c.Descripcion.Equals(((CItem)Combo_Remisiones.SelectedItem).Nombre))
                    Aux = false;
            }

            if(Aux)
                DatosDataGrid.Items.Add(new CDocto(Combo_Remisiones.SelectedValue.ToString(), ((CItem)Combo_Remisiones.SelectedItem).Nombre));
            }
            catch (Exception Exception)
            {
                MessageBox.Show("Favor de Agregar al menos una remisión para generar la factura.");
                return;
            
            
            }
            }

        class CDocto
        {
            public string Id { get; set; }
            public string Descripcion { get; set; }

            public CDocto(string Id, string Descripcion)
            {
                this.Id = Id;
                this.Descripcion = Descripcion;
            }
        }

        private void Button_Cancelar_Click_1(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Se ha cancelado la creación de la Factura");
            _tabControlPadre.Items.Remove(_tabItemPadre);
        }

        private void Button_CrearFactura_Click_1(object sender, RoutedEventArgs e)
        {
            if(DatosDataGrid.Items.Count > 0){

                List<CDocto> Milista = new List<CDocto>();
                int Factura_Generada;

                foreach (CDocto c in DatosDataGrid.Items)
                    Milista.Add(c);                

                Documento_Ventas Doc = new Documento_Ventas(_sesion.RFC, _sesion.UserName);
                Factura_Generada = Doc.Conversion
                (
                   Int32.Parse(Milista[0].Id), 
                   SIIE_ERP.BaseDatos.Documentos_Id.Doc_Remision,
                   SIIE_ERP.BaseDatos.Documentos_Id.Doc_FacturaCliente
                );
                Doc.Updata_Documento_Estatus(Int32.Parse(Milista[0].Id), Documentos_Id.Doc_Remision, EstatusDocs_Id.Estatus_Doc_Factura);

                for (int i = 1; i < Milista.Count; i++)
                {
                    Respuesta r =  Doc.AnexarRemisionAFactura(Int32.Parse(Milista[i].Id), Factura_Generada);
                    Doc.Updata_Documento_Estatus(Int32.Parse(Milista[i].Id), Documentos_Id.Doc_Remision, EstatusDocs_Id.Estatus_Doc_Factura);
                }

                _tabControlPadre.Items.Remove(_tabItemPadre);
                SIIE_ERP.View.NavegacionUI.AbrirPestanaEditar(Factura_Generada.ToString(),
                                                         typeof(Factura_Edita),
                                                         ref _tabControlPadre, _sesion);
            }
            else
            {
                MessageBox.Show("Favor de Agregar al menos una remisión para generar la factura.");
            }
        }        
    }    
}
